home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok58 / multimem / multimem.dok < prev    next >
Text File  |  1993-11-04  |  2KB  |  72 lines

  1.  
  2.  
  3.                           MultiMem
  4.                          ==========
  5.  
  6. Copyrigth © 1991 by Hartmut Goebel
  7.  
  8. Das Modul darf frei weitergegeben und benutzt werden, solange die
  9. Copyright-Notiz erhalten bleibt.
  10.  
  11.  
  12. MultiMem ist ein Modul, das mehrere unabhängige Speicherbereiche (Heaps)
  13. verwalten kann.
  14.  
  15. Mit NEW() (oder OberonLib.New()) allozierte Speicherblöcke können nur
  16. einzeln freigegeben werden - oder automatisch an Programmende.
  17. Bei manchen Anwendungen ist es jedoch nötig, den Speicher - oder Bereiche
  18. davon - schon während der Programmabarbeitung freizugeben (z.B. neuer
  19. Compilerlauf), jedoch nicht möglich oder zu umständlich, die Speicherblöcke
  20. einzeln freizugeben (z.B. komplexe Listenkonstruktionen).
  21.  
  22. Hier hilft MultiMem!
  23.  
  24. Sie können mehrere, voneinander unabhängige Speicherbereiche verwalten,
  25. und diese jederzeit wieder freigeben.
  26.  
  27.  
  28. TYPE
  29.   HeapPtr = POINTER TO Heap;
  30.  
  31. PROCEDURE NewHeap(VAR heap: HeapPtr);
  32.  
  33.   Erzeugt einen neuen Heap.
  34.  
  35.  
  36. PROCEDURE EmptyHeap(heap: HeapPtr);
  37.  
  38.   Gibt den Inhalt des Heaps frei.
  39.   Der Heap selbst existiert danach noch, ist jedoch leer.
  40.  
  41.  
  42. PROCEDURE DisposeHeap(VAR heap: HeapPtr);
  43.  
  44.   Gibt den angegebenen Heap (mit Inhalt) frei.
  45.   Der Heap wird hierbei auch entfernt!!
  46.   Er darf danach nicht mehr benutzt werden.
  47.  
  48.  
  49. PROCEDURE New(heap: HeapPtr; VAR adr: LONGINT; size: LONGINT);
  50. PROCEDURE Dispose(VAR adr: LONGINT);
  51.  
  52.   New() alloziert im <heap> einen Block der Größe <size> und schreibt
  53.   seine Adresse in <adr>. <adr> ist NIL, wenn kein Speicher alloziert
  54.   werden konnte.
  55.   Es wird Speicher des in OberonLib.MemReqs angegebenen Typs alloziert.
  56.   Der <heap> muß vorher mit NewHeap() erzeugt werden.
  57.   Dispose() Gibt den mit New() allozierten Speicher wieder frei.
  58.  
  59.  
  60. Insider-Information:
  61.   Die mit New() oder OberonLib.New() allozierten Speicheblöcke sind
  62.   Londword-alligned, beginnen jedoch nicht an eine duch 8 teilbaren
  63.   Adresse.
  64.   Dies dürfte aber nur in den allerwenigsten Fällen interessent sein.
  65.   Auswirkungen auf die Funktionsfähigkeit der damit arbeitenden
  66.   Programme hat das nicht!!
  67.   Wenn Sie also nicht wissen, was dieser Hinweis soll, ist er für Sie
  68.   absolut irrelevant!
  69.  
  70. ++ hartmut
  71.  
  72.